{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.7.10","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Importing Libraries","metadata":{}},{"cell_type":"code","source":"! pip install biosppy   ","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:20:12.707108Z","iopub.execute_input":"2021-07-28T07:20:12.708128Z","iopub.status.idle":"2021-07-28T07:20:24.636711Z","shell.execute_reply.started":"2021-07-28T07:20:12.707901Z","shell.execute_reply":"2021-07-28T07:20:24.635444Z"},"trusted":true},"execution_count":1,"outputs":[{"name":"stdout","text":"Collecting biosppy\n  Downloading biosppy-0.7.3.tar.gz (85 kB)\n\u001b[K     |████████████████████████████████| 85 kB 1.3 MB/s eta 0:00:011\n\u001b[?25hCollecting bidict\n  Downloading bidict-0.21.2-py2.py3-none-any.whl (37 kB)\nRequirement already satisfied: h5py in /opt/conda/lib/python3.7/site-packages (from biosppy) (2.10.0)\nRequirement already satisfied: matplotlib in /opt/conda/lib/python3.7/site-packages (from biosppy) (3.4.2)\nRequirement already satisfied: numpy in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.19.5)\nRequirement already satisfied: scikit-learn in /opt/conda/lib/python3.7/site-packages (from biosppy) (0.23.2)\nRequirement already satisfied: scipy in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.6.3)\nRequirement already satisfied: shortuuid in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.0.1)\nRequirement already satisfied: six in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.15.0)\nRequirement already satisfied: joblib in /opt/conda/lib/python3.7/site-packages (from biosppy) (1.0.1)\nRequirement already satisfied: opencv-python in /opt/conda/lib/python3.7/site-packages (from biosppy) (4.5.2.54)\nRequirement already satisfied: cycler>=0.10 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (0.10.0)\nRequirement already satisfied: python-dateutil>=2.7 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (2.8.1)\nRequirement already satisfied: kiwisolver>=1.0.1 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (1.3.1)\nRequirement already satisfied: pillow>=6.2.0 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (8.2.0)\nRequirement already satisfied: pyparsing>=2.2.1 in /opt/conda/lib/python3.7/site-packages (from matplotlib->biosppy) (2.4.7)\nRequirement already satisfied: threadpoolctl>=2.0.0 in /opt/conda/lib/python3.7/site-packages (from scikit-learn->biosppy) (2.1.0)\nBuilding wheels for collected packages: biosppy\n  Building wheel for biosppy (setup.py) ... \u001b[?25ldone\n\u001b[?25h  Created wheel for biosppy: filename=biosppy-0.7.3-py2.py3-none-any.whl size=95409 sha256=03b5e4f5776c9d8cb7b25303732791492f203853d9da7d96f09b795cf1dfb22c\n  Stored in directory: /root/.cache/pip/wheels/2f/4f/8f/28b2adc462d7e37245507324f4817ce1c64ef2464f099f4f0b\nSuccessfully built biosppy\nInstalling collected packages: bidict, biosppy\nSuccessfully installed bidict-0.21.2 biosppy-0.7.3\n\u001b[33mWARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv\u001b[0m\n","output_type":"stream"}]},{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport tensorflow as tf\nimport wfdb\nimport os                                                                                                  \nimport gc\nimport scipy       \nimport sklearn\nfrom pathlib import Path\nfrom sklearn.utils import shuffle\nfrom sklearn.manifold import TSNE\nimport seaborn as sns\nfrom sklearn import preprocessing\nimport shutil\nimport math\nimport random\nfrom scipy.spatial import distance\nfrom biosppy.signals import ecg\nfrom scipy.interpolate import PchipInterpolator","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:20:32.224891Z","iopub.execute_input":"2021-07-28T07:20:32.225287Z","iopub.status.idle":"2021-07-28T07:20:40.041551Z","shell.execute_reply.started":"2021-07-28T07:20:32.225252Z","shell.execute_reply":"2021-07-28T07:20:40.040521Z"},"trusted":true},"execution_count":2,"outputs":[]},{"cell_type":"code","source":"try:\n    tpu = tf.distribute.cluster_resolver.TPUClusterResolver()  # TPU detection\n    print('Running on TPU ', tpu.cluster_spec().as_dict()['worker'])\nexcept ValueError:\n    raise BaseException('ERROR: Not connected to a TPU runtime; please see the previous cell in this notebook for instructions!')\n\ntf.config.experimental_connect_to_cluster(tpu)\ntf.tpu.experimental.initialize_tpu_system(tpu)\ntpu_strategy = tf.distribute.experimental.TPUStrategy(tpu)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:20:44.471749Z","iopub.execute_input":"2021-07-28T07:20:44.472118Z","iopub.status.idle":"2021-07-28T07:20:49.711525Z","shell.execute_reply.started":"2021-07-28T07:20:44.472088Z","shell.execute_reply":"2021-07-28T07:20:49.710614Z"},"trusted":true},"execution_count":3,"outputs":[{"name":"stdout","text":"Running on TPU  ['10.0.0.2:8470']\n","output_type":"stream"}]},{"cell_type":"markdown","source":"# Dataset Creation","metadata":{}},{"cell_type":"code","source":"###### Constants\nFS = 500\nW_LEN = 355\nW_LEN_1_4 = 355 // 4\nW_LEN_3_4 = 3 * (355 // 4)\n\n###### Function to Segment Signals\n\ndef segmentSignals(signal, r_peaks_annot, normalization=True, person_id= None, file_id=None):\n    \n    \"\"\"\n    Segments signals based on the detected R-Peak\n    Args:\n        signal (numpy array): input signal\n        r_peaks_annot (int []): r-peak locations.\n        normalization (bool, optional): apply z-normalization or not? . Defaults to True.\n        person_id ([type], optional): [description]. Defaults to None.\n        file_id ([type], optional): [description]. Defaults to None.\n    Returns:\n            [tuple(numpy array,numpy array)]: segmented signals and refined r-peaks\n    \"\"\"\n    def refine_rpeaks(signal, r_peaks):\n        \"\"\"\n        Refines the detected R-peaks. If the R-peak is slightly shifted, this assigns the \n        highest point R-peak.\n        Args:\n            signal (numpy array): input signal\n            r_peaks (int []): list of detected r-peaks\n        Returns:\n            [numpy array]: refined r-peaks\n        \"\"\"\n        r_peaks2 = np.array(r_peaks)            # make a copy\n        for i in range(len(r_peaks)):\n            r = r_peaks[i]          # current R-peak\n            small_segment = signal[max(0,r-100):min(len(signal),r+100)]         # consider the neighboring segment of R-peak\n            r_peaks2[i] = np.argmax(small_segment) - 100 + r_peaks[i]           # picking the highest point\n            r_peaks2[i] = min(r_peaks2[i],len(signal))                          # the detected R-peak shouldn't be outside the signal\n            r_peaks2[i] = max(r_peaks2[i],0)                                    # checking if it goes before zero    \n        return r_peaks2                     # returning the refined r-peak list\n    \n    segmented_signals = []                      # array containing the segmented beats\n    \n    r_peaks = np.array(r_peaks_annot)\n\n    r_peaks = refine_rpeaks(signal, r_peaks)\n    skip_len = 2 # Parameter to specify number of r_peaks in one signal\n    max_seq_len = 640 # Parameter to specify maximum sequence length\n    \n    for r_curr in range(0,int(r_peaks.shape[0]-(skip_len-1)),skip_len):\n        if ((r_peaks[r_curr]-W_LEN_1_4)<0) or ((r_peaks[r_curr+(skip_len-1)]+W_LEN_3_4)>=len(signal)):           # not enough signal to segment\n            continue\n        segmented_signal = np.array(signal[r_peaks[r_curr]-W_LEN_1_4:r_peaks[r_curr+(skip_len-1)]+W_LEN_3_4])        # segmenting a heartbeat\n        segmented_signal = list(segmented_signal)\n        #print(segmented_signal.shape)\n        \n        if(len(segmented_signal) < 640):\n            for m in range(int(640-len(segmented_signal))): # Zero Padding\n                segmented_signal.append(0)\n        else:\n            segmented_signal = (segmented_signal[:int(max_seq_len)])\n            \n        segmented_signal = np.array(segmented_signal)\n        \n        if(segmented_signal.shape != (640,1)):    \n            segmented_signal = np.reshape(segmented_signal,(640,1))\n            \n        if (normalization):             # Z-score normalization\n            if abs(np.std(segmented_signal))<1e-6:          # flat line ECG, will cause zero division error\n                continue\n            segmented_signal = (segmented_signal - np.mean(segmented_signal)) / np.std(segmented_signal)            \n              \n        #if not np.isnan(segmented_signal).any():                    # checking for nan, this will never happen\n            segmented_signals.append(segmented_signal)\n\n    return segmented_signals,r_peaks           # returning the segmented signals and the refined r-peaks\n\n\n###### Function to Read Records\n\ndef read_rec(rec_path):\n\n    \"\"\" \n    Function to read record and return Segmented Signals\n\n    INPUTS:-\n    1) rec_path : Path of the Record\n\n    OUTPUTS:-\n    1) seg_sigs : Final Segmented Signals\n\n    \"\"\"\n    number_of_peaks = 2 # For extracting the required number of peaks                                    \n    full_rec = (wfdb.rdrecord(rec_path)).p_signal[:,0] # Entire Record - Taking Signal from Lead-1\n\n    f = PchipInterpolator(np.arange(int(full_rec.shape[0])),full_rec) # Fitting Interpolation Function\n    num_samples = int(full_rec.shape[0]) # Total Samples in 1000Hz Signal\n    num_samples_final = int(num_samples*(500/1000))\n    x_samp = (np.arange(num_samples)*(1000/500))[:num_samples_final] # Fixing Interpolation Input Values\n    full_rec_interp = f(x_samp)  # Intepolating Values \n    \n    r_peaks_init = ecg.hamilton_segmenter(full_rec_interp,500)[0] # R-Peak Segmentation and input is the signal frequency of 500Hz in this case\n    final_peak_index = r_peaks_init[int(r_peaks_init.shape[0] - int((r_peaks_init.shape[0]%number_of_peaks)))-1]\n    r_peaks_final = r_peaks_init[:final_peak_index] # Final Number of R_Peaks\n    full_rec_final = full_rec_interp[:int(r_peaks_final[-1]+W_LEN)] # Final Sequence\n    seg_sigs, r_peaks_ref = segmentSignals(full_rec_final,list(r_peaks_final)) # Final Signal Segmentation\n\n    return seg_sigs","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:21:03.925081Z","iopub.execute_input":"2021-07-28T07:21:03.925425Z","iopub.status.idle":"2021-07-28T07:21:03.946908Z","shell.execute_reply.started":"2021-07-28T07:21:03.925397Z","shell.execute_reply":"2021-07-28T07:21:03.945949Z"},"trusted":true},"execution_count":4,"outputs":[]},{"cell_type":"code","source":"###### Extracting List of the Elements with Two Sessions \ndir = '../input/ptb-dataset/ptb-diagnostic-ecg-database-1.0.0'\ntotal_index = 0\n#subjects_with_two = []\nsubjects = []\n\nfor item in np.sort(os.listdir(dir)):\n    #print('----------------------------------')\n    #print(item)\n    dir_sub = os.path.join(dir,item)\n    if(os.path.isdir(dir_sub)):\n        subjects.append(item)\n        #print(len(os.listdir(dir_sub))//3)\n        #if(len(os.listdir(dir_sub))//3 >= 2):\n            #total_index = total_index+1   \n            #print(item)\n        #    subjects_with_two.append(item)\n    #print('----------------------------------')\n\n#print(total_index)\n#print(subjects_with_two)\n\n#subjects = shuffle(subjects)[:100] # Shuffling and Taking 100 Subjects \n#print(subjects)\n\nprint(subjects)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:22:12.492758Z","iopub.execute_input":"2021-07-28T07:22:12.493154Z","iopub.status.idle":"2021-07-28T07:22:12.506345Z","shell.execute_reply.started":"2021-07-28T07:22:12.493119Z","shell.execute_reply":"2021-07-28T07:22:12.505500Z"},"trusted":true},"execution_count":10,"outputs":[{"name":"stdout","text":"['patient001', 'patient002', 'patient003', 'patient004', 'patient005', 'patient006', 'patient007', 'patient008', 'patient009', 'patient010', 'patient011', 'patient012', 'patient013', 'patient014', 'patient015', 'patient016', 'patient017', 'patient018', 'patient019', 'patient020', 'patient021', 'patient022', 'patient023', 'patient024', 'patient025', 'patient026', 'patient027', 'patient028', 'patient029', 'patient030', 'patient031', 'patient032', 'patient033', 'patient034', 'patient035', 'patient036', 'patient037', 'patient038', 'patient039', 'patient040', 'patient041', 'patient042', 'patient043', 'patient044', 'patient045', 'patient046', 'patient047', 'patient048', 'patient049', 'patient050', 'patient051', 'patient052', 'patient053', 'patient054', 'patient055', 'patient056', 'patient057', 'patient058', 'patient059', 'patient060', 'patient061', 'patient062', 'patient063', 'patient064', 'patient065', 'patient066', 'patient067', 'patient068', 'patient069', 'patient070', 'patient071', 'patient072', 'patient073', 'patient074', 'patient075', 'patient076', 'patient077', 'patient078', 'patient079', 'patient080', 'patient081', 'patient082', 'patient083', 'patient084', 'patient085', 'patient086', 'patient087', 'patient088', 'patient089', 'patient090', 'patient091', 'patient092', 'patient093', 'patient094', 'patient095', 'patient096', 'patient097', 'patient098', 'patient099', 'patient100', 'patient101', 'patient102', 'patient103', 'patient104', 'patient105', 'patient106', 'patient107', 'patient108', 'patient109', 'patient110', 'patient111', 'patient112', 'patient113', 'patient114', 'patient115', 'patient116', 'patient117', 'patient118', 'patient119', 'patient120', 'patient121', 'patient122', 'patient123', 'patient125', 'patient126', 'patient127', 'patient128', 'patient129', 'patient130', 'patient131', 'patient133', 'patient135', 'patient136', 'patient137', 'patient138', 'patient139', 'patient140', 'patient141', 'patient142', 'patient143', 'patient144', 'patient145', 'patient146', 'patient147', 'patient148', 'patient149', 'patient150', 'patient151', 'patient152', 'patient153', 'patient154', 'patient155', 'patient156', 'patient157', 'patient158', 'patient159', 'patient160', 'patient162', 'patient163', 'patient164', 'patient165', 'patient166', 'patient167', 'patient168', 'patient169', 'patient170', 'patient171', 'patient172', 'patient173', 'patient174', 'patient175', 'patient176', 'patient177', 'patient178', 'patient179', 'patient180', 'patient181', 'patient182', 'patient183', 'patient184', 'patient185', 'patient186', 'patient187', 'patient188', 'patient189', 'patient190', 'patient191', 'patient192', 'patient193', 'patient194', 'patient195', 'patient196', 'patient197', 'patient198', 'patient199', 'patient200', 'patient201', 'patient202', 'patient203', 'patient204', 'patient205', 'patient206', 'patient207', 'patient208', 'patient209', 'patient210', 'patient211', 'patient212', 'patient213', 'patient214', 'patient215', 'patient216', 'patient217', 'patient218', 'patient219', 'patient220', 'patient221', 'patient222', 'patient223', 'patient224', 'patient225', 'patient226', 'patient227', 'patient228', 'patient229', 'patient230', 'patient231', 'patient232', 'patient233', 'patient234', 'patient235', 'patient236', 'patient237', 'patient238', 'patient239', 'patient240', 'patient241', 'patient242', 'patient243', 'patient244', 'patient245', 'patient246', 'patient247', 'patient248', 'patient249', 'patient250', 'patient251', 'patient252', 'patient253', 'patient254', 'patient255', 'patient256', 'patient257', 'patient258', 'patient259', 'patient260', 'patient261', 'patient262', 'patient263', 'patient264', 'patient265', 'patient266', 'patient267', 'patient268', 'patient269', 'patient270', 'patient271', 'patient272', 'patient273', 'patient274', 'patient275', 'patient276', 'patient277', 'patient278', 'patient279', 'patient280', 'patient281', 'patient282', 'patient283', 'patient284', 'patient285', 'patient286', 'patient287', 'patient288', 'patient289', 'patient290', 'patient291', 'patient292', 'patient293', 'patient294']\n","output_type":"stream"}]},{"cell_type":"code","source":"###### Creation of Numpy Arrays - Training Dataset\nmain_dir = '../input/ptb-dataset/ptb-diagnostic-ecg-database-1.0.0'\n\nX_train = []\nX_dev = []\ny_train = []\ny_dev = []\n\ncurrent_index = 0\n\n#for person_index,person_folder in enumerate(list(np.sort(os.listdir(main_dir)))):\n \nfor person_folder in np.sort(subjects):\n    \n    if(current_index <= 231): # Taking 80% of the subjects for training \n    \n        person_folder_path = os.path.join(main_dir,person_folder)\n        person_folder_items = (list(np.sort(os.listdir(person_folder_path))))\n\n        for file_idx in range(0,len(person_folder_items),3):\n            file_path_list = str((os.path.join(person_folder_path,person_folder_items[file_idx])))\n            file_num = file_idx//3\n\n            rec_path = ''\n            for item_index in range(0,(len(file_path_list)-4)):\n                rec_path = rec_path+str(file_path_list[item_index])\n\n            seg_signal_current = read_rec(rec_path) # Extracting Records\n\n            for k in range(len(seg_signal_current)):\n\n                if(k <= np.round(len(seg_signal_current)*0.5)):\n                    X_train.append(seg_signal_current[k])\n                    y_train.append(current_index)\n\n                else:\n                    X_dev.append(seg_signal_current[k])\n                    y_dev.append(current_index)\n\n            #if(file_num == 0):\n            #    for k in range(len(seg_signal_current)):\n            #        X_train.append(seg_signal_current[k])\n            #        y_train.append(current_index)\n\n            #if(file_num == 1):\n            #    for k in range(len(seg_signal_current)):\n            #        X_dev.append(seg_signal_current[k])\n            #        y_dev.append(current_index)\n\n        current_index = current_index+1\n        print('Processed for Person - '+str(current_index))\n    \n###### Shuffling Numpy Arrays\nX_train,y_train = shuffle(X_train,y_train)\nX_dev,y_dev = shuffle(X_dev,y_dev)\n\nprint(np.array(X_train).shape)\nprint(np.array(y_train).shape)\nprint(np.array(X_dev).shape)\nprint(np.array(y_dev).shape)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T05:05:20.895214Z","iopub.execute_input":"2021-07-28T05:05:20.895738Z","iopub.status.idle":"2021-07-28T05:07:22.49404Z","shell.execute_reply.started":"2021-07-28T05:05:20.895707Z","shell.execute_reply":"2021-07-28T05:07:22.493017Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"###### Creation of Numpy Arrays - Testing Dataset\nmain_dir = '../input/ptb-dataset/ptb-diagnostic-ecg-database-1.0.0'\n\nX_train = []\nX_dev = []\ny_train = []\ny_dev = []\n\ncurrent_index = 0\n\n#for person_index,person_folder in enumerate(list(np.sort(os.listdir(main_dir)))):\n \nfor person_folder in np.sort(subjects):\n    \n    if(current_index > 231):\n    \n        person_folder_path = os.path.join(main_dir,person_folder)\n        person_folder_items = (list(np.sort(os.listdir(person_folder_path))))\n\n        for file_idx in range(0,len(person_folder_items),3):\n            file_path_list = str((os.path.join(person_folder_path,person_folder_items[file_idx])))\n            file_num = file_idx//3\n\n            rec_path = ''\n            for item_index in range(0,(len(file_path_list)-4)):\n                rec_path = rec_path+str(file_path_list[item_index])\n\n            seg_signal_current = read_rec(rec_path) # Extracting Records\n\n            for k in range(len(seg_signal_current)):\n\n                if(k <= np.round(len(seg_signal_current)*0.5)):\n                    X_train.append(seg_signal_current[k])\n                    y_train.append(current_index-232)\n\n                else:\n                    X_dev.append(seg_signal_current[k])\n                    y_dev.append(current_index-232)\n\n            #if(file_num == 0):\n            #    for k in range(len(seg_signal_current)):\n            #        X_train.append(seg_signal_current[k])\n            #        y_train.append(current_index)\n\n            #if(file_num == 1):\n            #    for k in range(len(seg_signal_current)):\n            #        X_dev.append(seg_signal_current[k])\n            #        y_dev.append(current_index)\n\n    current_index = current_index+1\n    print('Processed for Person - '+str(current_index))\n    \n###### Shuffling Numpy Arrays\nX_train,y_train = shuffle(X_train,y_train)\nX_dev,y_dev = shuffle(X_dev,y_dev)\n\nprint(np.array(X_train).shape)\nprint(np.array(y_train).shape)\nprint(np.array(X_dev).shape)\nprint(np.array(y_dev).shape)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:22:34.346406Z","iopub.execute_input":"2021-07-28T07:22:34.347044Z","iopub.status.idle":"2021-07-28T07:22:55.641586Z","shell.execute_reply.started":"2021-07-28T07:22:34.346994Z","shell.execute_reply":"2021-07-28T07:22:55.640821Z"},"trusted":true},"execution_count":11,"outputs":[{"name":"stdout","text":"Processed for Person - 1\nProcessed for Person - 2\nProcessed for Person - 3\nProcessed for Person - 4\nProcessed for Person - 5\nProcessed for Person - 6\nProcessed for Person - 7\nProcessed for Person - 8\nProcessed for Person - 9\nProcessed for Person - 10\nProcessed for Person - 11\nProcessed for Person - 12\nProcessed for Person - 13\nProcessed for Person - 14\nProcessed for Person - 15\nProcessed for Person - 16\nProcessed for Person - 17\nProcessed for Person - 18\nProcessed for Person - 19\nProcessed for Person - 20\nProcessed for Person - 21\nProcessed for Person - 22\nProcessed for Person - 23\nProcessed for Person - 24\nProcessed for Person - 25\nProcessed for Person - 26\nProcessed for Person - 27\nProcessed for Person - 28\nProcessed for Person - 29\nProcessed for Person - 30\nProcessed for Person - 31\nProcessed for Person - 32\nProcessed for Person - 33\nProcessed for Person - 34\nProcessed for Person - 35\nProcessed for Person - 36\nProcessed for Person - 37\nProcessed for Person - 38\nProcessed for Person - 39\nProcessed for Person - 40\nProcessed for Person - 41\nProcessed for Person - 42\nProcessed for Person - 43\nProcessed for Person - 44\nProcessed for Person - 45\nProcessed for Person - 46\nProcessed for Person - 47\nProcessed for Person - 48\nProcessed for Person - 49\nProcessed for Person - 50\nProcessed for Person - 51\nProcessed for Person - 52\nProcessed for Person - 53\nProcessed for Person - 54\nProcessed for Person - 55\nProcessed for Person - 56\nProcessed for Person - 57\nProcessed for Person - 58\nProcessed for Person - 59\nProcessed for Person - 60\nProcessed for Person - 61\nProcessed for Person - 62\nProcessed for Person - 63\nProcessed for Person - 64\nProcessed for Person - 65\nProcessed for Person - 66\nProcessed for Person - 67\nProcessed for Person - 68\nProcessed for Person - 69\nProcessed for Person - 70\nProcessed for Person - 71\nProcessed for Person - 72\nProcessed for Person - 73\nProcessed for Person - 74\nProcessed for Person - 75\nProcessed for Person - 76\nProcessed for Person - 77\nProcessed for Person - 78\nProcessed for Person - 79\nProcessed for Person - 80\nProcessed for Person - 81\nProcessed for Person - 82\nProcessed for Person - 83\nProcessed for Person - 84\nProcessed for Person - 85\nProcessed for Person - 86\nProcessed for Person - 87\nProcessed for Person - 88\nProcessed for Person - 89\nProcessed for Person - 90\nProcessed for Person - 91\nProcessed for Person - 92\nProcessed for Person - 93\nProcessed for Person - 94\nProcessed for Person - 95\nProcessed for Person - 96\nProcessed for Person - 97\nProcessed for Person - 98\nProcessed for Person - 99\nProcessed for Person - 100\nProcessed for Person - 101\nProcessed for Person - 102\nProcessed for Person - 103\nProcessed for Person - 104\nProcessed for Person - 105\nProcessed for Person - 106\nProcessed for Person - 107\nProcessed for Person - 108\nProcessed for Person - 109\nProcessed for Person - 110\nProcessed for Person - 111\nProcessed for Person - 112\nProcessed for Person - 113\nProcessed for Person - 114\nProcessed for Person - 115\nProcessed for Person - 116\nProcessed for Person - 117\nProcessed for Person - 118\nProcessed for Person - 119\nProcessed for Person - 120\nProcessed for Person - 121\nProcessed for Person - 122\nProcessed for Person - 123\nProcessed for Person - 124\nProcessed for Person - 125\nProcessed for Person - 126\nProcessed for Person - 127\nProcessed for Person - 128\nProcessed for Person - 129\nProcessed for Person - 130\nProcessed for Person - 131\nProcessed for Person - 132\nProcessed for Person - 133\nProcessed for Person - 134\nProcessed for Person - 135\nProcessed for Person - 136\nProcessed for Person - 137\nProcessed for Person - 138\nProcessed for Person - 139\nProcessed for Person - 140\nProcessed for Person - 141\nProcessed for Person - 142\nProcessed for Person - 143\nProcessed for Person - 144\nProcessed for Person - 145\nProcessed for Person - 146\nProcessed for Person - 147\nProcessed for Person - 148\nProcessed for Person - 149\nProcessed for Person - 150\nProcessed for Person - 151\nProcessed for Person - 152\nProcessed for Person - 153\nProcessed for Person - 154\nProcessed for Person - 155\nProcessed for Person - 156\nProcessed for Person - 157\nProcessed for Person - 158\nProcessed for Person - 159\nProcessed for Person - 160\nProcessed for Person - 161\nProcessed for Person - 162\nProcessed for Person - 163\nProcessed for Person - 164\nProcessed for Person - 165\nProcessed for Person - 166\nProcessed for Person - 167\nProcessed for Person - 168\nProcessed for Person - 169\nProcessed for Person - 170\nProcessed for Person - 171\nProcessed for Person - 172\nProcessed for Person - 173\nProcessed for Person - 174\nProcessed for Person - 175\nProcessed for Person - 176\nProcessed for Person - 177\nProcessed for Person - 178\nProcessed for Person - 179\nProcessed for Person - 180\nProcessed for Person - 181\nProcessed for Person - 182\nProcessed for Person - 183\nProcessed for Person - 184\nProcessed for Person - 185\nProcessed for Person - 186\nProcessed for Person - 187\nProcessed for Person - 188\nProcessed for Person - 189\nProcessed for Person - 190\nProcessed for Person - 191\nProcessed for Person - 192\nProcessed for Person - 193\nProcessed for Person - 194\nProcessed for Person - 195\nProcessed for Person - 196\nProcessed for Person - 197\nProcessed for Person - 198\nProcessed for Person - 199\nProcessed for Person - 200\nProcessed for Person - 201\nProcessed for Person - 202\nProcessed for Person - 203\nProcessed for Person - 204\nProcessed for Person - 205\nProcessed for Person - 206\nProcessed for Person - 207\nProcessed for Person - 208\nProcessed for Person - 209\nProcessed for Person - 210\nProcessed for Person - 211\nProcessed for Person - 212\nProcessed for Person - 213\nProcessed for Person - 214\nProcessed for Person - 215\nProcessed for Person - 216\nProcessed for Person - 217\nProcessed for Person - 218\nProcessed for Person - 219\nProcessed for Person - 220\nProcessed for Person - 221\nProcessed for Person - 222\nProcessed for Person - 223\nProcessed for Person - 224\nProcessed for Person - 225\nProcessed for Person - 226\nProcessed for Person - 227\nProcessed for Person - 228\nProcessed for Person - 229\nProcessed for Person - 230\nProcessed for Person - 231\nProcessed for Person - 232\nProcessed for Person - 233\nProcessed for Person - 234\nProcessed for Person - 235\nProcessed for Person - 236\nProcessed for Person - 237\nProcessed for Person - 238\nProcessed for Person - 239\nProcessed for Person - 240\nProcessed for Person - 241\nProcessed for Person - 242\nProcessed for Person - 243\nProcessed for Person - 244\nProcessed for Person - 245\nProcessed for Person - 246\nProcessed for Person - 247\nProcessed for Person - 248\nProcessed for Person - 249\nProcessed for Person - 250\nProcessed for Person - 251\nProcessed for Person - 252\nProcessed for Person - 253\nProcessed for Person - 254\nProcessed for Person - 255\nProcessed for Person - 256\nProcessed for Person - 257\nProcessed for Person - 258\nProcessed for Person - 259\nProcessed for Person - 260\nProcessed for Person - 261\nProcessed for Person - 262\nProcessed for Person - 263\nProcessed for Person - 264\nProcessed for Person - 265\nProcessed for Person - 266\nProcessed for Person - 267\nProcessed for Person - 268\nProcessed for Person - 269\nProcessed for Person - 270\nProcessed for Person - 271\nProcessed for Person - 272\nProcessed for Person - 273\nProcessed for Person - 274\nProcessed for Person - 275\nProcessed for Person - 276\nProcessed for Person - 277\nProcessed for Person - 278\nProcessed for Person - 279\nProcessed for Person - 280\nProcessed for Person - 281\nProcessed for Person - 282\nProcessed for Person - 283\nProcessed for Person - 284\nProcessed for Person - 285\nProcessed for Person - 286\nProcessed for Person - 287\nProcessed for Person - 288\nProcessed for Person - 289\nProcessed for Person - 290\n(2474, 640, 1)\n(2474,)\n(2335, 640, 1)\n(2335,)\n","output_type":"stream"}]},{"cell_type":"code","source":"###### Saving Numpy Arrays\nnp.savez_compressed('X_train_PTB_290_test_OSV.npz',np.array(X_train))\nnp.savez_compressed('y_train_PTB_290_test_OSV.npz',np.array(y_train))\nnp.savez_compressed('X_dev_PTB_290_test_OSV.npz',np.array(X_dev))\nnp.savez_compressed('y_dev_PTB_290_test_OSV.npz',np.array(y_dev)) ","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:24:02.772479Z","iopub.execute_input":"2021-07-28T07:24:02.772842Z","iopub.status.idle":"2021-07-28T07:24:03.752776Z","shell.execute_reply.started":"2021-07-28T07:24:02.772812Z","shell.execute_reply":"2021-07-28T07:24:03.751874Z"},"trusted":true},"execution_count":14,"outputs":[]},{"cell_type":"code","source":"##### Loading Dataset\nX_train = np.array(np.load('./X_train_PTB_290_test_OSV.npz',allow_pickle=True)['arr_0'],dtype=np.float16)\nX_dev = np.array(np.load('./X_dev_PTB_290_test_OSV.npz',allow_pickle=True)['arr_0'],dtype=np.float16)\ny_train = np.load('./y_train_PTB_290_test_OSV.npz',allow_pickle=True)['arr_0']\ny_dev = np.load('./y_dev_PTB_290_test_OSV.npz',allow_pickle=True)['arr_0']","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:24:19.112303Z","iopub.execute_input":"2021-07-28T07:24:19.112655Z","iopub.status.idle":"2021-07-28T07:24:19.289700Z","shell.execute_reply.started":"2021-07-28T07:24:19.112626Z","shell.execute_reply":"2021-07-28T07:24:19.288583Z"},"trusted":true},"execution_count":15,"outputs":[]},{"cell_type":"code","source":"##### Converting Labels to Categorical Format\ny_train_ohot = tf.keras.utils.to_categorical(y_train)\ny_dev_ohot = tf.keras.utils.to_categorical(y_dev)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:24:21.541766Z","iopub.execute_input":"2021-07-28T07:24:21.542153Z","iopub.status.idle":"2021-07-28T07:24:21.547509Z","shell.execute_reply.started":"2021-07-28T07:24:21.542120Z","shell.execute_reply":"2021-07-28T07:24:21.546357Z"},"trusted":true},"execution_count":16,"outputs":[]},{"cell_type":"code","source":"##### Testing \nprint(y_dev[:10])\n#print(np.array(X_train).shape)\n#print(np.array(y_train).shape)\n#print(np.array(X_dev).shape)\n#print(np.array(y_dev).shape)\n\n#for i in range(2):\n#    plt.plot(np.arange(640),X_train[i])\n#    plt.show()","metadata":{"execution":{"iopub.status.busy":"2021-07-28T05:19:38.67101Z","iopub.execute_input":"2021-07-28T05:19:38.671329Z","iopub.status.idle":"2021-07-28T05:19:38.676475Z","shell.execute_reply.started":"2021-07-28T05:19:38.671302Z","shell.execute_reply":"2021-07-28T05:19:38.675412Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Model Making","metadata":{}},{"cell_type":"markdown","source":"## Self-Calibrated Convolution","metadata":{}},{"cell_type":"code","source":"###### Model Development : Self-Calibrated \n\n##### Defining Self-Calibrated Block\n\nrate_regularizer = 1e-5\nclass self_cal_Conv1D(tf.keras.layers.Layer):\n\n    \"\"\" \n    This is inherited class from keras.layers and shall be instatition of self-calibrated convolutions\n    \"\"\"\n    \n    def __init__(self,num_filters,kernel_size,num_features):\n    \n        #### Defining Essentials\n        super().__init__()\n        self.num_filters = num_filters\n        self.kernel_size = kernel_size\n        self.num_features = num_features # Number of Channels in Input\n\n        #### Defining Layers\n        self.conv2 = tf.keras.layers.Conv1D(self.num_features/2,self.kernel_size,padding='same',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32',activation='relu')\n        self.conv3 = tf.keras.layers.Conv1D(self.num_features/2,self.kernel_size,padding='same',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32',activation='relu')\n        self.conv4 = tf.keras.layers.Conv1D(self.num_filters/2,self.kernel_size,padding='same',activation='relu',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32')\n        self.conv1 = tf.keras.layers.Conv1D(self.num_filters/2,self.kernel_size,padding='same',activation='relu',kernel_regularizer=tf.keras.regularizers.l2(rate_regularizer),dtype='float32')\n        self.upsample = tf.keras.layers.Conv1DTranspose(filters=int(self.num_features/2),kernel_size=4,strides=4)\n        #self.attention_layer = tf.keras.layers.Attention()\n        #self.lstm = tf.keras.layers.LSTM(int(self.num_features/2),return_sequences=True)\n        #self.layernorm = tf.keras.layers.LayerNormalization()\n    \n    def get_config(self):\n\n        config = super().get_config().copy()\n        config.update({\n            'num_filters': self.num_filters,\n            'kernel_size': self.kernel_size,\n            'num_features': self.num_features\n        })\n        return config\n    \n    \n    def call(self,X):\n       \n        \"\"\"\n          INPUTS : 1) X - Input Tensor of shape (batch_size,sequence_length,num_features)\n          OUTPUTS : 1) X - Output Tensor of shape (batch_size,sequence_length,num_features)\n        \"\"\"\n        \n        #### Dimension Extraction\n        b_s = (X.shape)[0] \n        seq_len = (X.shape)[1]\n        num_features = (X.shape)[2]\n        \n        #### Channel-Wise Division\n        X_attention = X[:,:,0:int(self.num_features/2)]\n        X_global = X[:,:,int(self.num_features/2):]\n        \n        #### Self Calibration Block\n\n        ### Local Feature Detection\n\n        ## Down-Sampling\n        #x1 = X_attention[:,0:int(seq_len/5),:]\n        #x2 = X_attention[:,int(seq_len/5):int(seq_len*(2/5)),:]\n        #x3 = X_attention[:,int(seq_len*(2/5)):int(seq_len*(3/5)),:]\n        #x4 = X_attention[:,int(seq_len*(3/5)):int(seq_len*(4/5)),:]\n        #x5 = X_attention[:,int(seq_len*(4/5)):seq_len,:]\n        x_down_sampled = tf.keras.layers.AveragePooling1D(pool_size=4,strides=4)(X_attention)\n        \n        ## Convoluting Down Sampled Sequence \n        #x1 = self.conv2(x1)\n        #x2 = self.conv2(x2)\n        #x3 = self.conv2(x3)\n        #x4 = self.conv2(x4)\n        #x5 = self.conv2(x5)\n        x_down_conv = self.conv2(x_down_sampled)\n        #x_down_feature = self.attention_layer([x_down_sampled,x_down_sampled])\n        #x_down_feature = self.lstm(x_down_sampled)\n        #x_down_feature = self.layernorm(x_down_feature)\n        \n        ## Up-Sampling\n        x_down_upsampled = self.upsample(x_down_conv)   \n        #X_local_upsampled = tf.keras.layers.concatenate([x1,x2,x3,x4,x5],axis=1)\n\n        ## Local-CAM\n        X_local = X_attention + x_down_upsampled  #X_local_upsampled\n\n        ## Local Importance \n        X_2 = tf.keras.activations.sigmoid(X_local)\n\n        ### Self-Calibration\n\n        ## Global Convolution\n        X_3 = self.conv3(X_attention)\n\n        ## Attention Determination\n        X_attention = tf.math.multiply(X_2,X_3)\n\n        #### Self-Calibration Feature Extraction\n        X_4 = self.conv4(X_attention)\n\n        #### Normal Feature Extraction\n        X_1 = self.conv1(X_global)\n\n        #### Concatenating and Returning Output\n        return (tf.keras.layers.concatenate([X_1,X_4],axis=2))","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:26:00.537843Z","iopub.execute_input":"2021-07-28T07:26:00.538310Z","iopub.status.idle":"2021-07-28T07:26:00.558569Z","shell.execute_reply.started":"2021-07-28T07:26:00.538273Z","shell.execute_reply":"2021-07-28T07:26:00.557072Z"},"trusted":true},"execution_count":17,"outputs":[]},{"cell_type":"markdown","source":"## Transformer","metadata":{}},{"cell_type":"code","source":"def get_angles(pos, i, d_model):\n    angle_rates = 1 / np.power(10000, (2 * (i//2)) / np.float32(d_model))\n    return pos * angle_rates\n\ndef positional_encoding(position, d_model):\n    angle_rads = get_angles(np.arange(position)[:, np.newaxis],\n                          np.arange(d_model)[np.newaxis, :],\n                          d_model)\n  \n  # apply sin to even indices in the array; 2i\n    angle_rads[:, 0::2] = np.sin(angle_rads[:, 0::2])\n  \n  # apply cos to odd indices in the array; 2i+1\n    angle_rads[:, 1::2] = np.cos(angle_rads[:, 1::2])\n    \n    pos_encoding = angle_rads[np.newaxis, ...]\n    \n    return tf.cast(pos_encoding, dtype=tf.float32)\n\ndef create_padding_mask(seq):\n    seq = tf.cast(tf.math.equal(seq, 0), tf.float32)\n  \n    # add extra dimensions to add the padding\n    # to the attention logits. \n    return seq[:, tf.newaxis, tf.newaxis, :]  # (batch_size, 1, 1, seq_len)\n\ndef scaled_dot_product_attention(q, k, v, mask):\n    \"\"\"Calculate the attention weights.\n    q, k, v must have matching leading dimensions.\n    k, v must have matching penultimate dimension, i.e.: seq_len_k = seq_len_v.\n    The mask has different shapes depending on its type(padding or look ahead) \n    but it must be broadcastable for addition.\n\n    Args:\n    q: query shape == (..., seq_len_q, depth)\n    k: key shape == (..., seq_len_k, depth)\n    v: value shape == (..., seq_len_v, depth_v)\n    mask: Float tensor with shape broadcastable \n          to (..., seq_len_q, seq_len_k). Defaults to None.\n\n    Returns:\n    output, attention_weights\n    \"\"\"\n\n    matmul_qk = tf.matmul(q, k, transpose_b=True)  # (..., seq_len_q, seq_len_k)\n  \n    # scale matmul_qk\n    dk = tf.cast(tf.shape(k)[-1], tf.float32)\n    scaled_attention_logits = matmul_qk / tf.math.sqrt(dk)\n\n    # add the mask to the scaled tensor.\n    if mask is not None:\n        scaled_attention_logits += (mask * -1e9)  \n\n    # softmax is normalized on the last axis (seq_len_k) so that the scores\n    # add up to 1.\n    attention_weights = tf.nn.softmax(scaled_attention_logits, axis=-1)  # (..., seq_len_q, seq_len_k)\n\n    output = tf.matmul(attention_weights, v)  # (..., seq_len_q, depth_v)\n\n    return output, attention_weights\n\nclass MultiHeadAttention(tf.keras.layers.Layer):\n    \n    def __init__(self, d_model, num_heads):\n        super(MultiHeadAttention, self).__init__()\n        self.num_heads = num_heads\n        self.d_model = d_model\n\n        assert d_model % self.num_heads == 0\n\n        self.depth = d_model // self.num_heads\n\n        self.wq = tf.keras.layers.Dense(d_model)\n        self.wk = tf.keras.layers.Dense(d_model)\n        self.wv = tf.keras.layers.Dense(d_model)\n\n        self.dense = tf.keras.layers.Dense(d_model)\n\n    def get_config(self):\n        config = super(MultiHeadAttention, self).get_config().copy()\n        config.update({\n            'd_model': self.d_model,\n            'num_heads':self.num_heads\n        })\n        \n    def split_heads(self, x, batch_size):\n        \n        \"\"\"Split the last dimension into (num_heads, depth).\n        Transpose the result such that the shape is (batch_size, num_heads, seq_len, depth)\n        \"\"\"\n        x = tf.reshape(x, (batch_size, -1, self.num_heads, self.depth))\n        return tf.transpose(x, perm=[0, 2, 1, 3])\n    \n    def call(self, v, k, q, mask):\n        batch_size = tf.shape(q)[0]\n\n        q = self.wq(q)  # (batch_size, seq_len, d_model)\n        k = self.wk(k)  # (batch_size, seq_len, d_model)\n        v = self.wv(v)  # (batch_size, seq_len, d_model)\n\n        q = self.split_heads(q, batch_size)  # (batch_size, num_heads, seq_len_q, depth)\n        k = self.split_heads(k, batch_size)  # (batch_size, num_heads, seq_len_k, depth)\n        v = self.split_heads(v, batch_size)  # (batch_size, num_heads, seq_len_v, depth)\n\n        # scaled_attention.shape == (batch_size, num_heads, seq_len_q, depth)\n        # attention_weights.shape == (batch_size, num_heads, seq_len_q, seq_len_k)\n        scaled_attention, attention_weights = scaled_dot_product_attention(\n            q, k, v, mask)\n\n        scaled_attention = tf.transpose(scaled_attention, perm=[0, 2, 1, 3])  # (batch_size, seq_len_q, num_heads, depth)\n\n        concat_attention = tf.reshape(scaled_attention, \n                                      (batch_size, -1, self.d_model))  # (batch_size, seq_len_q, d_model)\n\n        output = self.dense(concat_attention)  # (batch_size, seq_len_q, d_model)\n\n        return output, attention_weights\n\ndef point_wise_feed_forward_network(d_model, dff):\n    return tf.keras.Sequential([\n      tf.keras.layers.Dense(dff, activation='relu'),  # (batch_size, seq_len, dff)\n      tf.keras.layers.Dense(d_model)  # (batch_size, seq_len, d_model)\n  ])\n\nclass Encoder(tf.keras.layers.Layer):\n    def __init__(self, num_layers, d_model, num_heads, dff,\n               maximum_position_encoding, rate=0.1):\n        super(Encoder, self).__init__()\n\n        self.d_model = d_model\n        self.num_layers = num_layers\n        self.num_heads = num_heads\n        self.dff = dff\n        self.maximum_position_encoding = maximum_position_encoding\n        self.rate = rate\n\n        #self.embedding = tf.keras.layers.Embedding(input_vocab_size, d_model)\n        self.pos_encoding = positional_encoding(maximum_position_encoding, \n                                                self.d_model)\n\n\n        self.enc_layers = [EncoderLayer(d_model, num_heads, dff, rate) \n                           for _ in range(num_layers)]\n\n        self.dropout = tf.keras.layers.Dropout(rate)\n        \n    def get_config(self):\n        config = super(Encoder, self).get_config().copy()\n        config.update({\n            'num_layers': self.num_layers,\n            'd_model': self.d_model,\n            'num_heads':self.num_heads,\n            'dff':self.dff,\n            'maximum_position_encoding':self.maximum_position_encoding,\n            'rate':self.rate  \n        })\n        \n    def call(self, x, training, mask):\n\n        seq_len = tf.shape(x)[1]\n\n        # adding embedding and position encoding.\n        #x = self.embedding(x)  # (batch_size, input_seq_len, d_model)\n        x *= tf.math.sqrt(tf.cast(self.d_model, tf.float32))\n        x += self.pos_encoding[:, :seq_len, :]\n\n        x = self.dropout(x, training=training)         \n\n        for i in range(self.num_layers):\n            x = self.enc_layers[i](x, training, mask)\n\n        return x  # (batch_size, input_seq_len, d_model)\n\nclass EncoderLayer(tf.keras.layers.Layer):\n    def __init__(self, d_model, num_heads, dff, rate=0.1):\n        super(EncoderLayer, self).__init__()\n        \n        self.d_model = d_model\n        self.num_heads = num_heads\n        self.dff = dff\n        self.rate = rate\n\n        self.mha = MultiHeadAttention(d_model, num_heads)\n        self.ffn = point_wise_feed_forward_network(d_model, dff)\n\n        self.layernorm1 = tf.keras.layers.LayerNormalization(epsilon=1e-6)\n        self.layernorm2 = tf.keras.layers.LayerNormalization(epsilon=1e-6)\n\n        self.dropout1 = tf.keras.layers.Dropout(rate)\n        self.dropout2 = tf.keras.layers.Dropout(rate)\n        \n    def get_config(self):\n        config = super(EncoderLayer, self).get_config().copy()\n        config.update({\n            'd_model': self.d_model,\n            'num_heads':self.num_heads,\n            'dff':self.dff,\n            'rate':self.rate  \n        })\n        \n    def call(self, x, training, mask):\n\n        attn_output, _ = self.mha(x, x, x, mask)  # (batch_size, input_seq_len, d_model)\n        attn_output = self.dropout1(attn_output, training=training)\n        out1 = self.layernorm1(x + attn_output)  # (batch_size, input_seq_len, d_model)\n\n        ffn_output = self.ffn(out1)  # (batch_size, input_seq_len, d_model)\n        ffn_output = self.dropout2(ffn_output, training=training)\n        out2 = self.layernorm2(out1 + ffn_output)  # (batch_size, input_seq_len, d_model)\n    \n        return out2\n    \nclass Transformer(tf.keras.Model):\n    def __init__(self, num_layers, d_model, num_heads, dff, \n                 pe_input, rate=0.1):\n        super(Transformer, self).__init__()\n        \n        self.num_layers = num_layers\n        self.d_model = d_model\n        self.num_heads = num_heads\n        self.dff = dff\n        self.pe_input = pe_input\n        self.rate = rate\n        \n        self.encoder = Encoder(num_layers, d_model, num_heads, dff, \n                                pe_input, rate)\n        \n    def get_config(self):\n        config = super(Transformer,self).get_config().copy()\n        config.update({\n            'num_layers': self.num_layers,\n            'd_model': self.d_model,\n            'num_heads':self.num_heads,\n            'dff':self.dff,\n            'pe_input':self.pe_input,\n            'rate':self.rate  \n        })\n    \n    def call(self, inp, training, enc_padding_mask):\n        return self.encoder(inp, training, enc_padding_mask)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:26:08.170530Z","iopub.execute_input":"2021-07-28T07:26:08.170905Z","iopub.status.idle":"2021-07-28T07:26:08.216761Z","shell.execute_reply.started":"2021-07-28T07:26:08.170874Z","shell.execute_reply":"2021-07-28T07:26:08.215464Z"},"trusted":true},"execution_count":18,"outputs":[]},{"cell_type":"markdown","source":"## ArcFace Loss","metadata":{}},{"cell_type":"code","source":"class ArcFace(tf.keras.layers.Layer):\n    \n    def __init__(self, n_classes, s, m,regularizer):\n        super().__init__()\n        self.n_classes = n_classes\n        self.s = s\n        self.m = m\n        self.regularizer = tf.keras.regularizers.get(regularizer)\n\n    def get_config(self):\n\n        config = super().get_config().copy()\n        config.update({\n            'n_classes': self.n_classes,\n            's': self.s,\n            'm': self.m,\n            'regularizer': self.regularizer\n        })\n        return config\n\n    def build(self, input_shape):\n        super(ArcFace, self).build(input_shape[0])\n        self.W = self.add_weight(name='W',\n                                shape=(input_shape[0][-1], self.n_classes),\n                                initializer='glorot_uniform',\n                                trainable=True\n                                )\n\n    def call(self, inputs):\n        x, y = inputs\n        c = tf.keras.backend.shape(x)[-1]\n        # normalize feature\n        x = tf.nn.l2_normalize(x, axis=1)\n        # normalize weights\n        W = tf.nn.l2_normalize(self.W, axis=0)\n        # dot product\n        logits = x @ W\n        # add margin\n        # clip logits to prevent zero division when backward\n        theta = tf.acos(tf.keras.backend.clip(logits, -1.0 + tf.keras.backend.epsilon(), 1.0 - tf.keras.backend.epsilon()))\n        target_logits = tf.cos(theta + self.m)\n        # sin = tf.sqrt(1 - logits**2)\n        # cos_m = tf.cos(logits)\n        # sin_m = tf.sin(logits)\n        # target_logits = logits * cos_m - sin * sin_m\n        #\n        logits = logits * (1 - y) + target_logits * y\n        # feature re-scale\n        logits *= self.s\n        out = tf.nn.softmax(logits)    \n        return out\n\n    def compute_output_shape(self, input_shape):\n        return (None, self.n_classes)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:26:20.444789Z","iopub.execute_input":"2021-07-28T07:26:20.445195Z","iopub.status.idle":"2021-07-28T07:26:20.458081Z","shell.execute_reply.started":"2021-07-28T07:26:20.445162Z","shell.execute_reply":"2021-07-28T07:26:20.456835Z"},"trusted":true},"execution_count":19,"outputs":[]},{"cell_type":"markdown","source":"# Model Training","metadata":{}},{"cell_type":"code","source":"####### Phase-1 Models\n###### Defining Architecture\n\nwith tpu_strategy.scope():\n\n    ##### SC_Module \n\n    #### Defining Hyperparameters\n    num_layers = 2\n    d_model = 512\n    num_heads = 8\n    dff = 1024\n    max_seq_len = 640 #X_train.shape[1]\n    pe_input = 160\n    rate = 0.5\n    num_features = 1\n    num_classes = 58\n\n    #### Defining Layers\n    Input_layer = tf.keras.layers.Input(shape=(max_seq_len,num_features))\n    self_conv1 = self_cal_Conv1D(128,15,128)\n    self_conv2 = self_cal_Conv1D(128,20,128) # Newly Added\n    self_conv3 = self_cal_Conv1D(256,15,128)\n    self_conv4 = self_cal_Conv1D(256,20,256) # Newly Added\n    self_conv5 = self_cal_Conv1D(512,15,256)\n    self_conv6 = self_cal_Conv1D(512,20,512) # Newly Added\n    self_conv7 = self_cal_Conv1D(1024,15,512)\n    self_conv8 = self_cal_Conv1D(1024,20,1024) # Newly Added\n    conv_initial = tf.keras.layers.Conv1D(32,15,padding='same',activation='relu')\n    conv_second = tf.keras.layers.Conv1D(64,15,padding='same',activation='relu')\n    conv_third = tf.keras.layers.Conv1D(128,15,padding='same',activation='relu')\n    #lstm1 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128,activation='tanh',return_sequences=True),merge_mode='ave')\n    transform_1 = tf.keras.layers.Conv1D(128,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transform_2 = tf.keras.layers.Conv1D(256,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transform_3 = tf.keras.layers.Conv1D(512,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transform_4 = tf.keras.layers.Conv1D(1024,3,padding='same',kernel_initializer='lecun_normal', activation='selu')\n    transformer = Transformer(num_layers,d_model,num_heads,dff,pe_input,rate)\n    gap_layer = tf.keras.layers.GlobalAveragePooling1D()\n    arc_logit_layer = ArcFace(58,30.0,0.3,tf.keras.regularizers.l2(1e-4))\n\n    #### Defining Architecture\n    ### Input Layer\n    Inputs = Input_layer\n    Input_Labels = tf.keras.layers.Input(shape=(num_classes,))\n\n    ### Initial Convolutional Layers\n    conv_initial = conv_initial(Inputs)\n    #conv_initial = tf.keras.layers.LayerNormalization()(conv_initial)\n    #conv_initial = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv_initial)     \n    #conv_initial = tf.keras.layers.Add()([conv_initial,Inputs])\n    \n    conv_second = conv_second(conv_initial)\n    #conv_second = tf.keras.layers.LayerNormalization()(conv_second)\n    #conv_second = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv_second)\n    #conv_second = tf.keras.layers.Add()([conv_second,conv_initial])\n    #conv_second = tf.keras.layers.concatenate(axis=2)([conv_initial,conv_second])\n    \n    conv_third = conv_third(conv_second)\n    #conv_third = tf.keras.layers.LayerNormalization()(conv_third)\n    #conv_third = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv_third)\n    #mask = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(Inputs)\n    #conv_third = tf.keras.layers.Add()([conv_third,conv_second])\n    #conv_third = tf.keras.layers.concatenate(axis=2)([conv_initial,conv_second,conv_third])\n    #conv_third = lstm1(conv_second)\n    #conv_third = tf.keras.layers.Attention()([conv_third,conv_third])\n    \n    ### 1st Residual Block\n    transform_1 = transform_1(conv_third)\n    conv1 = self_conv1(conv_third)\n    #conv1 = tf.keras.layers.AlphaDropout(rate=0.2)(conv1)\n    conv2 = self_conv2(conv1)\n    #conv2 = tf.keras.layers.AlphaDropout(rate=0.2)(conv2)\n    conv2 = tf.keras.layers.Add()([conv2,transform_1])\n    #conv2 = tf.keras.layers.LayerNormalization()(conv2)\n    conv2 = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv2)\n    #mask = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(mask)    \n\n    ### 2nd Residual Block\n    #conv_third = tf.keras.layers.Attention()([conv_third,conv_third])\n    transform_2 = transform_2(conv2)\n    conv3 = self_conv3(conv2)\n    #conv3 = tf.keras.layers.AlphaDropout(rate=0.2)(conv3)\n    conv4 = self_conv4(conv3)\n    #conv4 = tf.keras.layers.AlphaDropout(rate=0.2)(conv4)\n    conv4 = tf.keras.layers.Add()([conv4,transform_2])\n    #conv4 = tf.keras.layers.LayerNormalization()(conv4)\n    conv4 = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv4)\n    #mask = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(mask)\n\n    ### 3rd Residual Block\n    transform_3 = transform_3(conv4)\n    conv5 = self_conv5(conv4)\n    #conv5 = tf.keras.layers.AlphaDropout(rate=0.2)(conv5)\n    conv6 = self_conv6(conv5)\n    #conv6 = tf.keras.layers.AlphaDropout(rate=0.2)(conv6)\n    conv6 = tf.keras.layers.Add()([conv6,transform_3])\n    #conv6 = tf.keras.layers.LayerNormalization()(conv6)\n    #conv6 = tf.keras.layers.MaxPool1D(pool_size=2,strides=2)(conv6)\n\n    ### 4th Residual Block\n    #transform_4 = transform_4(conv6)\n    #conv7 = self_conv7(conv6)\n    #conv8 = self_conv8(conv7)\n    #conv8 = tf.keras.layers.Add()([conv8,transform_4])\n\n    ### Transformer\n    ## Wide-Head Attention Model\n    #tx_embedding = tf.keras.layers.Lambda(PE_Layer)(Inputs)\n    #tx_embedding = tf.keras.layers.Dropout(rate)(tx_embedding,training=True)\n    #mask_reshaped = tf.keras.layers.Reshape((max_seq_len,))(Inputs)\n    #encoder_op1 = encoder_block1(tx_embedding,mask_reshaped)\n    #encoder_op2 = encoder_block2(encoder_op1,mask_reshaped)\n\n    ## Narrow-Head Attention Model\n    #mask_reshaped = tf.keras.layers.Reshape((160,))(mask)\n    embeddings =  transformer(inp=conv6,enc_padding_mask=None)\n    #embeddings = transformer(inp=conv6,enc_padding_mask=create_padding_mask(mask))\n    #residual_embeddings = tf.keras.layers.Add()([conv6,embeddings])\n\n    ### Output Layers\n    ## Initial Layers\n    gap_op = gap_layer(embeddings)\n    dense1 = tf.keras.layers.Dense(256,activation='relu')(gap_op)\n    dropout1 = tf.keras.layers.Dropout(rate)(dense1)\n    \n    ## ArcFace Output Network\n    dense2 = tf.keras.layers.Dense(256,kernel_initializer='he_normal',\n                kernel_regularizer=tf.keras.regularizers.l2(1e-4))(dropout1)\n    ##dense2 = tf.keras.layers.BatchNormalization()(dense2)\n    dense3 = arc_logit_layer(([dense2,Input_Labels]))\n    \n    ## Softmax Output Network\n    #dense2 = tf.keras.layers.Dense(256,activation='relu')(dropout1)\n    ###dropout2 = tf.keras.layers.Dropout(rate)(dense2) # Not to be included\n    #dense3 = tf.keras.layers.Dense(35,activation='softmax')(dense2)\n\n    #### Compiling Architecture            \n    ### ArcFace Model Compilation\n    model = tf.keras.models.Model(inputs=[Inputs,Input_Labels],outputs=dense3)\n    ### Softmax Model Compilation\n    #model = tf.keras.models.Model(inputs=Inputs,outputs=dense3)\n    model.load_weights('../input/ptb290-osv-model/PTB-290_OSV.h5')\n    model.compile(tf.keras.optimizers.Adam(lr=1e-4,clipnorm=1.0),loss='categorical_crossentropy',metrics=['accuracy'])\n\nmodel.summary()      \ntf.keras.utils.plot_model(model)\n##### Model Training \n\n#### Model Checkpointing\n#! mkdir './Models'\n#filepath= \"/content/Models/saved-model-{epoch:02d}-{val_accuracy:.2f}.h5\"\n#checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath,monitor='val_accuracy',save_best_only=False,mode='max')\nfilepath = './PTB-290_OSV.h5'\ncheckpoint = tf.keras.callbacks.ModelCheckpoint(filepath,monitor='val_accuracy',save_best_only=True,mode='max',save_weights_only=True)\n\n#### Custom Learning Rate Schedule\n#def build_lrfn(lr_start=1e-4, lr_max=1e-3, \n#               lr_min=1e-6, lr_rampup_epochs=5, \n#               lr_sustain_epochs=0, lr_exp_decay=.87):\n#    lr_max = lr_max * tpu_strategy.num_replicas_in_sync\n\n#    def lrfn(epoch):\n#        if epoch < lr_rampup_epochs:\n#            lr = (lr_max - lr_start) / lr_rampup_epochs * epoch + lr_start\n#        elif epoch < lr_rampup_epochs + lr_sustain_epochs:\n#            lr = lr_max\n#        else:\n#            lr = (lr_max - lr_min) * lr_exp_decay**(epoch - lr_rampup_epochs - lr_sustain_epochs) + lr_min#\n#        return lr\n#    \n#    return lrfn\n\n#lrfn = build_lrfn()\n#lr_callback = tf.keras.callbacks.LearningRateScheduler(lrfn, verbose=1)\n#callback_list = [checkpoint,  lr_callback]\n\n#### Model Training\n#### Model Training\n### ArcFace Training\n#history = model.fit((X_train,y_train_ohot),y_train_ohot,epochs=500,batch_size=128,\n#                validation_data=((X_dev,y_dev_ohot),y_dev_ohot),validation_batch_size=128,\n#               callbacks=checkpoint)\n\n### Softmax Training \n#history = model.fit(X_train,y_train_ohot,epochs=250,batch_size=128,\n#                validation_data=(X_dev,y_dev_ohot),validation_batch_size=128,\n#                callbacks=checkpoint)\n\n\n##### Plotting Metrics  \n#### Accuracy and Loss Plots \n\n### Accuracy\n#plt.plot(history.history['accuracy'])\n#plt.plot(history.history['val_accuracy'])\n#plt.title('Model Accuracy')\n#plt.ylabel('Accuracy')\n#plt.xlabel('Epoch')  \n#plt.legend(['Train', 'Validation'], loc='best')\n#plt.show()\n\n### Loss     \n#plt.plot(history.history['loss'])  \n#plt.plot(history.history['val_loss'])\n#plt.title('Model Loss')  \n#plt.ylabel('Loss')         \n#plt.xlabel('epoch')\n#plt.legend(['Train', 'Validation'], loc='best')   \n#plt.show()      \n\n##### Saving Model            \n#model.save_weights('ECG_SCNRNet.h5' )","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:27:34.405703Z","iopub.execute_input":"2021-07-28T07:27:34.406113Z","iopub.status.idle":"2021-07-28T07:27:42.799198Z","shell.execute_reply.started":"2021-07-28T07:27:34.406071Z","shell.execute_reply":"2021-07-28T07:27:42.797669Z"},"trusted":true},"execution_count":20,"outputs":[{"name":"stdout","text":"Model: \"model\"\n__________________________________________________________________________________________________\nLayer (type)                    Output Shape         Param #     Connected to                     \n==================================================================================================\ninput_1 (InputLayer)            [(None, 640, 1)]     0                                            \n__________________________________________________________________________________________________\nconv1d_32 (Conv1D)              (None, 640, 32)      512         input_1[0][0]                    \n__________________________________________________________________________________________________\nconv1d_33 (Conv1D)              (None, 640, 64)      30784       conv1d_32[0][0]                  \n__________________________________________________________________________________________________\nconv1d_34 (Conv1D)              (None, 640, 128)     123008      conv1d_33[0][0]                  \n__________________________________________________________________________________________________\nself_cal__conv1d (self_cal_Conv (None, 640, 128)     262464      conv1d_34[0][0]                  \n__________________________________________________________________________________________________\nself_cal__conv1d_1 (self_cal_Co (None, 640, 128)     344384      self_cal__conv1d[0][0]           \n__________________________________________________________________________________________________\nconv1d_35 (Conv1D)              (None, 640, 128)     49280       conv1d_34[0][0]                  \n__________________________________________________________________________________________________\nadd (Add)                       (None, 640, 128)     0           self_cal__conv1d_1[0][0]         \n                                                                 conv1d_35[0][0]                  \n__________________________________________________________________________________________________\nmax_pooling1d (MaxPooling1D)    (None, 320, 128)     0           add[0][0]                        \n__________________________________________________________________________________________________\nself_cal__conv1d_2 (self_cal_Co (None, 320, 256)     385472      max_pooling1d[0][0]              \n__________________________________________________________________________________________________\nself_cal__conv1d_3 (self_cal_Co (None, 320, 256)     1376896     self_cal__conv1d_2[0][0]         \n__________________________________________________________________________________________________\nconv1d_36 (Conv1D)              (None, 320, 256)     98560       max_pooling1d[0][0]              \n__________________________________________________________________________________________________\nadd_1 (Add)                     (None, 320, 256)     0           self_cal__conv1d_3[0][0]         \n                                                                 conv1d_36[0][0]                  \n__________________________________________________________________________________________________\nmax_pooling1d_1 (MaxPooling1D)  (None, 160, 256)     0           add_1[0][0]                      \n__________________________________________________________________________________________________\nself_cal__conv1d_4 (self_cal_Co (None, 160, 512)     1540992     max_pooling1d_1[0][0]            \n__________________________________________________________________________________________________\nself_cal__conv1d_5 (self_cal_Co (None, 160, 512)     5506304     self_cal__conv1d_4[0][0]         \n__________________________________________________________________________________________________\nconv1d_37 (Conv1D)              (None, 160, 512)     393728      max_pooling1d_1[0][0]            \n__________________________________________________________________________________________________\nadd_2 (Add)                     (None, 160, 512)     0           self_cal__conv1d_5[0][0]         \n                                                                 conv1d_37[0][0]                  \n__________________________________________________________________________________________________\ntransformer (Transformer)       (None, 160, 512)     4205568     add_2[0][0]                      \n__________________________________________________________________________________________________\nglobal_average_pooling1d (Globa (None, 512)          0           transformer[0][0]                \n__________________________________________________________________________________________________\ndense_12 (Dense)                (None, 256)          131328      global_average_pooling1d[0][0]   \n__________________________________________________________________________________________________\ndropout_5 (Dropout)             (None, 256)          0           dense_12[0][0]                   \n__________________________________________________________________________________________________\ndense_13 (Dense)                (None, 256)          65792       dropout_5[0][0]                  \n__________________________________________________________________________________________________\ninput_2 (InputLayer)            [(None, 58)]         0                                            \n__________________________________________________________________________________________________\narc_face (ArcFace)              (None, 58)           14848       dense_13[0][0]                   \n                                                                 input_2[0][0]                    \n==================================================================================================\nTotal params: 14,529,920\nTrainable params: 14,529,920\nNon-trainable params: 0\n__________________________________________________________________________________________________\n","output_type":"stream"}]},{"cell_type":"markdown","source":"# Model Testing","metadata":{}},{"cell_type":"markdown","source":"## KNN based ArcFace Loss Testing","metadata":{}},{"cell_type":"code","source":"###### Testing Model - ArcFace Style                \nwith tpu_strategy.scope():     \n\n    def normalisation_layer(x):   \n        return(tf.math.l2_normalize(x, axis=1, epsilon=1e-12))\n\n    #X_dev_flipped = tf.image.flip_up_down(X_dev)  \n    #x_train_flipped = tf.image.flip_up_down(X_train_final)\n\n    predictive_model = tf.keras.models.Model(inputs=model.input,outputs=model.layers[-3].output)\n    predictive_model.compile(tf.keras.optimizers.Adam(lr=1e-4),loss='categorical_crossentropy',metrics=['accuracy'])\n\nwith tpu_strategy.scope():\n    y_in = tf.keras.layers.Input((58,))\n\n    Input_Layer = tf.keras.layers.Input((640,1))\n    op_1 = predictive_model([Input_Layer,y_in])\n\n    ##Input_Layer_Flipped = tf.keras.layers.Input((224,224,3))\n    ##op_2 = predictive_model([Input_Layer_Flipped,y_in]) \n    ##final_op = tf.keras.layers.Concatenate(axis=1)(op_1)\n\n    final_norm_op = tf.keras.layers.Lambda(normalisation_layer)(op_1)\n\n    testing_model = tf.keras.models.Model(inputs=[Input_Layer,y_in],outputs=final_norm_op)\n    testing_model.compile(tf.keras.optimizers.Adam(lr=1e-4),loss='categorical_crossentropy',metrics=['accuracy'])\n\n##### Nearest Neighbor Classification\nfrom sklearn.neighbors import KNeighborsClassifier\nTest_Embeddings = testing_model.predict((X_dev,y_dev_ohot))\nTrain_Embeddings = testing_model.predict((X_train,y_train_ohot))\n\ncol_mean = np.nanmean(Test_Embeddings, axis=0)\ninds = np.where(np.isnan(Test_Embeddings))\n#print(inds)\nTest_Embeddings[inds] = np.take(col_mean, inds[1])\n\ncol_mean = np.nanmean(Train_Embeddings, axis=0)\ninds = np.where(np.isnan(Train_Embeddings))\n#print(inds)\nTrain_Embeddings[inds] = np.take(col_mean, inds[1])\n\n#Test_Embeddings = np.nan_to_num(Test_Embeddings)\n\n##### Refining Test Embeddings\n#for i in range(Train_Embeddings.shape[0]):\n#    for j in range(Train_Embeddings.shape[1]):\n#        if(math.isnan(Train_Embeddings[i,j])):\n#            Train_Embeddings[i,j] == 0\n#        if(Train_Embeddings[i,j]>1e4):\n#            Train_Embeddings[i,j] == 1e4\n\n##### Refining Train Embeddings    \n#for i in range(Test_Embeddings.shape[0]):\n#    for j in range(Test_Embeddings.shape[1]):\n#        if(math.isnan(Test_Embeddings[i,j])):\n#            Test_Embeddings[i,j] == 0\n#        if(Test_Embeddings[i,j]>1e4 or math.isinf(Test_Embeddings[i,j])):\n#            Test_Embeddings[i,j] == 1e4\n\n#del(X_train_final,X_dev,X_dev_flipped,x_train_flipped)\n#gc.collect()\n\nTest_Accuracy_With_Train = []\nTest_Accuracy_With_Test = []\n                                                                     \nfor k in range(1,31):\n    knn = KNeighborsClassifier(n_neighbors=k,metric='euclidean')\n    knn.fit(Train_Embeddings,y_train)\n    Test_Accuracy_With_Train.append(knn.score(Test_Embeddings,y_dev))\n    knn.fit(Test_Embeddings,y_dev)\n    Test_Accuracy_With_Test.append(knn.score(Test_Embeddings,y_dev))\n\nprint('--------------------------------')\nprint(np.max(Test_Accuracy_With_Train))\nprint(np.max(Test_Accuracy_With_Test))\nprint('--------------------------------')\nprint(np.mean(Test_Accuracy_With_Train))\nprint(np.mean(Test_Accuracy_With_Test))\nprint('--------------------------------')\nprint((Test_Accuracy_With_Train)[0])\nprint((Test_Accuracy_With_Test)[0])\nprint('--------------------------------')\n\nplt.plot(np.arange(1,31),np.array(Test_Accuracy_With_Train),label='Test_Accuracy_With_Train')\nplt.plot(np.arange(1,31),np.array(Test_Accuracy_With_Test),label='Test_Accuracy_With_Test')\nplt.title('Testing Accuracy vs Number of Neighbors')\nplt.xlabel('Number of Neighbors')\nplt.ylabel('Test Accuracy')\nplt.legend()       \nplt.show()                 \n\nnp.savez_compressed('Test_Embeddings_PTB_290.npz',Test_Embeddings)\nnp.savez_compressed('Train_Embeddings_PTB_290.npz',Train_Embeddings)","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:27:54.966058Z","iopub.execute_input":"2021-07-28T07:27:54.966457Z","iopub.status.idle":"2021-07-28T07:29:53.055190Z","shell.execute_reply.started":"2021-07-28T07:27:54.966422Z","shell.execute_reply":"2021-07-28T07:29:53.054095Z"},"trusted":true},"execution_count":21,"outputs":[{"name":"stdout","text":"--------------------------------\n0.982441113490364\n1.0\n--------------------------------\n0.9723197715917201\n0.9755745895788723\n--------------------------------\n0.982441113490364\n1.0\n--------------------------------\n","output_type":"stream"},{"output_type":"display_data","data":{"text/plain":"<Figure size 432x288 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}}]},{"cell_type":"markdown","source":"## t-SNE","metadata":{}},{"cell_type":"code","source":"####### t-SNE Plot Generation\n###### Model Creation\n#with tpu_strategy.scope():          \n#    tsne_model = tf.keras.models.Model(inputs=model.input,outputs=model.layers[-4].output)\n#    tsne_model.compile(tf.keras.optimizers.Adam(lr=1e-4),loss='categorical_crossentropy',metrics=['accuracy'])\n#tsne_model.summary()\n\n###### Model Predicted\n#embeddings_final = tsne_model.predict((X_dev,y_exp))\n\n###### t-SNE plot plotting\n##### Reduction to Lower Dimensions\ntsne_X_dev = TSNE(n_components=2,perplexity=30,learning_rate=10,n_iter=2000,n_iter_without_progress=50).fit_transform(Test_Embeddings)\n\n##### Plotting\nj = 0 # Index for rotating legend\nplt.rcParams[\"figure.figsize\"] = [24,16]\nmStyles = [\".\",\",\",\"o\",\"v\",\"^\",\"<\",\">\",\"1\",\"2\",\"3\",\"4\",\"8\",\"s\",\"p\",\"P\",\"*\",\"h\",\"H\",\"+\",\"x\",\"X\",\"D\",\"d\",\"|\",\"_\",\n           0,1,2,3,4,5,6,7,8,9,10,11,0,1,2,3,4,5,6,7,8,9,10]\nfor idx,color_index,marker_type in zip(list(np.arange(100)),sns.color_palette('muted',100),mStyles):\n    plt.scatter(tsne_X_dev[y_dev == idx, 0], tsne_X_dev[y_dev == idx, 1],marker=marker_type)\nplt.legend([str(j) for j in range(100)])\nplt.savefig('tsne_plot_5000_iters.png')\nplt.savefig('tsne_plot_5000_iters.pdf')\nplt.show()","metadata":{"execution":{"iopub.status.busy":"2021-07-28T07:30:48.744918Z","iopub.execute_input":"2021-07-28T07:30:48.745329Z","iopub.status.idle":"2021-07-28T07:31:15.792327Z","shell.execute_reply.started":"2021-07-28T07:30:48.745299Z","shell.execute_reply":"2021-07-28T07:31:15.791485Z"},"trusted":true},"execution_count":22,"outputs":[{"output_type":"display_data","data":{"text/plain":"<Figure size 1728x1152 with 1 Axes>","image/png":"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\n"},"metadata":{"needs_background":"light"}}]}]}